use mac;

fn bucket_sort(arr: &mut [usize]) {
    // 找到数组中的最大值和最小值
    let max_value = *arr.iter().max().unwrap();
    let min_value = *arr.iter().min().unwrap();

    // 计算桶的数量
    let bucket_count = (max_value - min_value) / arr.len() + 1;

    // 创建桶
    let mut buckets: Vec<Vec<usize>> = vec![Vec::new(); bucket_count];

    // 将元素分配到桶中
    for &value in arr.iter() {
        let bucket_index = (value - min_value) / arr.len();
        buckets[bucket_index].push(value);
    }

    // 对每个桶进行排序
    for bucket in buckets.iter_mut() {
        bucket.sort_unstable(); // 使用 Rust 的内置排序算法
    }

    // 合并所有桶的结果
    let mut index = 0;
    for bucket in buckets {
        for &value in bucket.iter() {
            arr[index] = value;
            index += 1;
        }
    }
}
fn main() {
    let v = mac::my_vec![1,2,3,4,5,6,7,8,9,10];
    println!("v: {:?}", &v);

    let v1 = mac::my_vec1![1,2,3,4,5,6,7,8,9,10];
    for ve in &v1 {
        println!("v: {:?}", ve);
    }
    println!("v1: {:?}", v1);

    let mut v2 = vec![1,11,3,2,5,4,16,15,9,10];
    bucket_sort(v2.as_mut_slice());
    println!("v: {:?}", v2);
}